package com.tfjybj.itoo.teach.provider.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tfjybj.itoo.teach.entity.CourseScheduleEntity;
import com.tfjybj.itoo.teach.model.ClassModel;
import com.tfjybj.itoo.teach.model.CourseScheduleModel;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * CourseScheduleDao接口
 * courseSchedule表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
@Repository("courseScheduleDao")
public interface CourseScheduleDao extends BaseMapper<CourseScheduleEntity> {
	
	//region 模板生成：模糊查询

	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 检测教室被占用的情况--杨晓慧--2018年11月16日
     * @param conditionMap 状态集和（教室id，起始周次，学期信息）
     * @return 已被安排的星期节次集和
     */
    List<CourseScheduleModel> queryRoomUsedByWeekRoom(Map<String, String> conditionMap);

    /**
     * 检测教师授课冲突情况--杨晓慧--2018年11月16日
     * @param conditionMap 状态集和（教师id，起始周次，学期信息）
     * @return 已被安排的星期节次集和
     */
    List<CourseScheduleModel> queryTeacherUsedByTeacherId(Map<String, String> conditionMap);

    /**
     * 检测行政班其他课程排课安排情况--杨晓慧
     * @param conditionMap 状态集和（行政班id集和，起始周次，学期信息）
     * @return 已被安排的星期节次集和
     */
    List<CourseScheduleModel> queryClassUsedByClassId(Map<String, String> conditionMap);


    /**
     * 根据classId查询的课程表
     *
     * @param classId 学生ID
     * @return courseScheduleList
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseScheduleModel> queryCourseScheduleByClassId(@Param("classId") String classId);

    /**
     * 根据teacherId查询的课程表
     *
     * @param teacherId 教师ID
     * @return courseScheduleList
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    List<CourseScheduleModel> queryCourseScheduleByTeacherId(@Param("teacherId") String teacherId);


    /**
     * 根据上课班id集合来查询课程id集和
     * @param teachClassList 上课班id集和
     * @return 课程id集和
     * @author 杨晓慧
     * @since 2.0.0 2018-11-08 20:35:10
     */
    List<String> queryCourseIdsByTeachClassIds(@Param("teachClassList") List<String> teachClassList);


    /**
     * 根据id集合来查询课程表集和
     * @param ids 课程id集和
     * @return 课程表集和_listCourseScheduleModel
     * @author 田成荣
     * @since 2.0.0 2018-11-08 20:35:10
     */
    List<CourseScheduleModel> queryCourseScheduleByIds(@Param("ids") List<String> ids);


    /**
     *分页查询所有的已排课程
     * @return 已排课程信息
     * @author 杨晓慧
     * @since 2.0.0 2018年11月20日14:34:31    *
     */
    List<CourseScheduleModel> queryAllCourseSchedule();


    /**
     * 根据课程id来查询课程表信息
     * @param courseId 课程id
     * @return 课程表信息
     * @author 杨晓慧
     * @since 2.0.0 2018年11月20日15:43:24
     */
    List<CourseScheduleModel> queryScheduleByCourseId(@Param("courseId") String courseId);


    /**
     * 根据学院名称和专业名称查询行政班信息
     * @param strLike 模糊查询字段
     * @return 行政班列表
     * @author 杨晓慧
     * @since 2.0.0 2018年11月22日14:43:20
     */
    List<ClassModel> queryClassByAcmOrPfs(@Param("strLike") String strLike, @Param("academyId") String academyId, @Param("grades") List<String> grades);


    /**
     * 高级搜索条件查询课表信息
     * @param strLikeMap 教师，班级，课程信息Map
     * @return 课程表信息列表
     * @author 杨晓慧
     * @since 2.0.0 2018年11月27日11:00:25
     */
    List<CourseScheduleModel> queryScheduleByStrLike(Map<String, String> strLikeMap);

    /**
     * 根据上课班id集和查询课程表信息
     * @param teachClassIds 上课班id集和
     * @return 课程表信息列表
     * @author 杨晓慧
     * @since 2.0.0 2018-11-28 15:45:08
     */
    List<CourseScheduleModel> queryCourseScheduleByTeachClassIds(@Param("teachClassIds") List<String> teachClassIds);


    /**
     * 根据教室id查询该班级的课表情况
     * @param roomId 教室id
     * @return 返回该教室课表清空
     * @author 杨晓慧
     * @since 2.0.0 2018年12月3日15:40:30
     */
    List<CourseScheduleModel> queryCourseScheduleByRoomId(@Param("roomId") String roomId);

    /**
     * 根据班级_id模糊查询courseSchedule
     *
     * @param classId  班级_id
     * @return 模糊查询的courseSchedule
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    List<CourseScheduleEntity> queryCourseScheduleByLikeClassId(String classId);

    /**
     * 根据id查找CourseSchedule
     *
     * @param courseId 主键courseId
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    CourseScheduleEntity findByCourseId(String courseId);

    /**
     * 无参查询查找CourseSchedule
     *
     * @return courseScheduleEntity
     * @author 智雪艳
     * @since 2.0.0 2019-05-30 10:35:56
     */
    List<CourseScheduleEntity> queryCourse();
}
